package com.cicc.beergamevirtualsimulationsystem.common.enums.userTypeEnum;

import com.cicc.beergamevirtualsimulationsystem.common.constant.EchartsConstant;
import com.cicc.beergamevirtualsimulationsystem.model.echarts.vo.EchartsVo;

import java.util.Arrays;
import java.util.List;

/**
 * 角色类型与数据映射
 */
public enum RoleTypeConfig {
    // 定义三个角色类型及其对应的系列数据常量
    FACTORY(EchartsConstant.SERIES_PRODUCTION_COST,
            EchartsConstant.SERIES_INVENTORY_COST,
            EchartsConstant.SERIES_DEFERRED_DELIVERY_COST,
            EchartsConstant.Y_AXIS_PROFIT),  // 添加工厂角色的利润系列数据
    RETAILER(EchartsConstant.SERIES_ORDER_COST,
            EchartsConstant.SERIES_INVENTORY_COST,
            EchartsConstant.SERIES_DEFERRED_DELIVERY_COST,
            EchartsConstant.Y_AXIS_PROFIT), // 添加零售商角色的利润系列数据
    SUPPLIER(EchartsConstant.SERIES_ORDER_COST,
            EchartsConstant.SERIES_INVENTORY_COST,
            EchartsConstant.SERIES_DEFERRED_DELIVERY_COST,
            EchartsConstant.Y_AXIS_PROFIT),// 添加供应商角色的利润系列数据

    CUSTOMER(EchartsConstant.SERIES_ORDER_COST,
            EchartsConstant.SERIES_INVENTORY_COST,
            EchartsConstant.SERIES_DEFERRED_DELIVERY_COST,
            EchartsConstant.Y_AXIS_PROFIT); // 主机角色带有利润的系列数据


    // 每个角色类型对应的系列数据：订单成本、库存成本、延期交货成本、利润
    private final String orderCost;          // 订单成本的系列数据
    private final String inventoryCost;      // 库存成本的系列数据
    private final String deferredDeliveryCost; // 延期交货成本的系列数据
    private final String profit;             // 利润的系列数据

    // 枚举构造函数，初始化每个角色的系列数据
    // 枚举构造函数，初始化每个角色的系列数据（包含利润）
    RoleTypeConfig(String orderCost, String inventoryCost, String deferredDeliveryCost, String profit) {
        this.orderCost = orderCost;
        this.inventoryCost = inventoryCost;
        this.deferredDeliveryCost = deferredDeliveryCost;
        this.profit = profit;
    }

    // 枚举构造函数，初始化每个角色的系列数据（不包含利润）
    RoleTypeConfig(String orderCost, String inventoryCost, String deferredDeliveryCost) {
        this.orderCost = orderCost;
        this.inventoryCost = inventoryCost;
        this.deferredDeliveryCost = deferredDeliveryCost;
        this.profit = null; // 对于没有利润的角色，profit 设为 null
    }




    // 返回该角色类型对应的所有系列数据（订单成本、库存成本、延期交货成本）
    public List<EchartsVo.SeriesData> getSeriesData() {
        // 创建订单成本数据系列
        EchartsVo.SeriesData orderCostData = new EchartsVo.SeriesData(orderCost);
        // 创建库存成本数据系列
        EchartsVo.SeriesData inventoryCostData = new EchartsVo.SeriesData(inventoryCost);
        // 创建延期交货成本数据系列
        EchartsVo.SeriesData deferredDeliveryCostData = new EchartsVo.SeriesData(deferredDeliveryCost);
        // 返回包含所有系列数据的列表
        return Arrays.asList(orderCostData, inventoryCostData, deferredDeliveryCostData);
    }

    // 返回角色类型的总体数据
    public List<EchartsVo.SeriesData> overallData() {
        //创建利润数据系列
        EchartsVo.SeriesData profitData = new EchartsVo.SeriesData(profit);
        //创建订单成本数据系列
        EchartsVo.SeriesData orderCostData = new EchartsVo.SeriesData(orderCost);
        // 创建库存成本数据系列
        EchartsVo.SeriesData inventoryCostData = new EchartsVo.SeriesData(inventoryCost);
        // 创建延期交货成本数据系列
        EchartsVo.SeriesData deferredDeliveryCostData = new EchartsVo.SeriesData(deferredDeliveryCost);
        // 返回包含所有系列数据的列表
        return Arrays.asList(profitData,orderCostData,inventoryCostData, deferredDeliveryCostData);
    }
}
